
# 常用对话框函数库

class_name myDialog

# 单文件打开对话框
static func fopenBox(title:String,current_dir:String,scene_root:Node,filters:PoolStringArray,file_selected:String) -> FileDialog:
	var dlg:FileDialog = FileDialog.new()
	dlg.window_title = title # 对话框标题
	dlg.current_dir = current_dir # 当前目录
	dlg.mode = FileDialog.MODE_OPEN_FILE # 模式
	dlg.popup_exclusive = true # 模态窗口
	dlg.filters = filters # 文件类型过滤 提供一个字符串数组如右格式 ["*.png;PNGImages","*.gd;GDScript Files"]
	# 布局 -- 整个矩形
	dlg.anchor_top = 0
	dlg.anchor_right = 1
	dlg.anchor_bottom = 1
	dlg.anchor_left = 0
	# 外边距 -- 100
	dlg.margin_top = 100
	dlg.margin_right = -100
	dlg.margin_bottom = -100
	dlg.margin_left = 100
	# 连接信号到外部处理函数
	dlg.connect("file_selected",scene_root,file_selected)
	# 添加到所在场景的根节点或其他节点
	scene_root.add_child(dlg)
	dlg.owner = scene_root
	dlg.show() #显示
	
	return dlg # 返回文件名

# ============= 信息框 ================

# 显示简单信息和OK键，不返回任何内容
static func msgBox(title:String,msg:String,scene_root:Node) -> void:
	var dlg = AcceptDialog.new()
	dlg.window_title = title# 对话框标题
	dlg.popup_exclusive = true # 模态窗口
	dlg.dialog_text = msg # 正文文本
	dlg.dialog_autowrap = true # 文本自动换行
	dlg.rect_size = Vector2(300,200) # 对话框尺寸
	
	# 布局 -- 居中
	dlg.anchor_top = 0.5
	dlg.anchor_right = 0.5
	dlg.anchor_bottom = 0.5
	dlg.anchor_left = 0.5
	# 外边距 -- 按照尺寸分配，实现居中
	var half_width = dlg.rect_size.x/2
	var half_heigt = dlg.rect_size.y/2
	dlg.margin_top = -half_heigt
	dlg.margin_left = -half_width
	dlg.margin_bottom = half_heigt
	dlg.margin_right = half_width
	
	
	# 添加到所在场景的根节点或其他节点
	scene_root.add_child(dlg)
	dlg.owner = scene_root
	dlg.show() #显示

# 基于实例化场景文件的popup
static func popupWithPackedScene(content_scene:PackedScene,scene_root:Node) -> void:
	var popup = Popup.new()
	popup.popup_exclusive = true # 模态窗口
	# 布局 -- 居中
	popup.anchor_top = 0.5
	popup.anchor_right = 0.5
	popup.anchor_bottom = 0.5
	popup.anchor_left = 0.5
	# 外边距 -- 按照尺寸分配，实现居中
	var half_width = popup.rect_size.x/2
	var half_heigt = popup.rect_size.y/2
	popup.margin_top = -half_heigt
	popup.margin_left = -half_width
	popup.margin_bottom = half_heigt
	popup.margin_right = half_width

	var content_node:Control = content_scene.instance() # 被实例化的场景根节点类型必须为Control类型
	popup.add_child(content_node) # 将场景实例添加为popup子节点
	content_node.owner = popup
	# 添加到实际使用场景
	scene_root.add_child(popup)
	popup.owner = scene_root
	
	popup.show() #显示

